import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;

public class demo5 {
    public boolean canFinish(int n, int[][] p) {
        //邻接表存图
        HashMap<Integer, ArrayList<Integer>>map=new HashMap<>();
        //记录该点的入度
        int []in=new int[n];
        for (int i = 0; i <p.length ; i++) {
            int x=p[i][0];
            int y=p[i][1];//y->x
            if(!map.containsKey(y)){
                map.put(y,new ArrayList<>());
            }
            map.get(y).add(x);
            in[x]++;
        }
        Queue<Integer>queue=new LinkedList<>();
        for (int i = 0; i <n ; i++) {
            if(in[i]==0){
                queue.add(i);
            }
        }
        while (!queue.isEmpty()){
            int temp=queue.poll();
            ArrayList<Integer> list = map.getOrDefault(temp,new ArrayList<>(temp));
            for(Integer x:list){
                in[x]--;
                if(in[x]==0){
                    queue.add(x);
                }
            }
        }
        for (int i = 0; i <n ; i++) {
            if(in[i]!=0)return false;
        }
        return true;
    }
}
